package com.jshoperxms.controller.api.langdu;

import com.jshoperxms.Response;
import com.jshoperxms.controller.api.langdu.vo.AncientContentVo;
import com.jshoperxms.controller.api.langdu.vo.AncientsItemsVo;
import com.jshoperxms.controller.mall.backstage.base.BaseTController;
import com.jshoperxms.controller.utils.DateTools;
import com.jshoperxms.controller.utils.PrimaryKey;
import com.jshoperxms.controller.utils.enums.BaseEnums;
import com.jshoperxms.controller.utils.json.GsonJson;
import com.jshoperxms.controller.utils.statickey.TagWords;
import com.jshoperxms.entity.YdAncientQuestionsT;
import com.jshoperxms.service.YdAncientQuestionsTService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.*;

/**
 * Created by sdywcd on 2018/12/12.
 * Des:
 */
@RestController
@RequestMapping("/api/ancientq")
@Component
public class YdAncientQuestionsTController extends BaseTController {

    @Resource
    private YdAncientQuestionsTService ydAncientQuestionsTService;


    @RequestMapping(value="/rundCreateAncs",method= RequestMethod.POST)
    public ResponseEntity rundCreateAncs(){
        Map<String,Object> responsedata=new HashMap<>();

        String sql="SELECT * FROM yd_ancient_questions_t WHERE usedamount >= (SELECT floor(RAND() * (SELECT MAX(usedamount) FROM yd_ancient_questions_t))) ORDER BY ancnumber LIMIT 10";
        List<YdAncientQuestionsT>list=this.ydAncientQuestionsTService.queryBySql(YdAncientQuestionsT.class,sql);
        responsedata.put(TagWords.BEANLIST,list);
        return Response.success(responsedata);

    }






    @RequestMapping(value="/buildAnc",method= RequestMethod.POST)
    public ResponseEntity buildAnc(@RequestBody YdAncientQuestionsT rq){
        Map<String,Object> responsedata=new HashMap<>();

        //处理页面参数
        List<AncientsItemsVo> ancientsItemsVos=new LinkedList<>();
        List<AncientContentVo>ancientsVos= GsonJson.parseJsonToData(rq.getAncitemcontent(),AncientContentVo.class);
        for(int i=0;i<ancientsVos.size();i++){
            AncientsItemsVo an=new AncientsItemsVo();
            an.setIndex(i);
            an.setItem(AZFilter(i));
            an.setContent(ancientsVos.get(i).getContent());
            ancientsItemsVos.add(an);
        }

        if(!ancientsItemsVos.isEmpty()&&ancientsItemsVos.size()==4){
            for(int i=0;i<rq.getAncnumber();i++){
                YdAncientQuestionsT bean=new YdAncientQuestionsT();
                bean.setId(PrimaryKey.get().toString());
                bean.setStatus(BaseEnums.DataUsingState.USING.getState());
                bean.setCreatetime(DateTools.getSystemTimeLong());
                bean.setCreatorid("0");
                bean.setUpdatetime(DateTools.getSystemTimeLong());
                bean.setVersiont(1);
                bean.setAnctitle(rq.getAnctitle());
                bean.setWxopenid(rq.getWxopenid());
                bean.setAncnumber(rq.getAncnumber());
                bean.setAnclevel("1");
                bean.setUsedamount(0);
                bean=createAncQaTitleAndAnswer(ancientsItemsVos,i,bean);
                //bean.setAncqatitle(createAncQaTitle(ancientsItemsVos,i));
                //bean.setAncanswer(createAncAnswer(ancientsItemsVos,i));
                bean.setAncitemcontent(createAncItemsContent(ancientsItemsVos,bean.getAncanswer()));
                this.ydAncientQuestionsTService.save(bean);
                responsedata.put(TagWords.SUCCESS,true);
            }
        }

        return Response.success(responsedata);
    }

    private String createAncItemsContent(List<AncientsItemsVo>itemsVos,String answer){
        //答案
        AncientsItemsVo an=GsonJson.parsejsonToObject(answer,AncientsItemsVo.class);
        List<AncientsItemsVo>copy=new LinkedList<>();
        copy.addAll(itemsVos);
        for(AncientsItemsVo co:copy){

            if(StringUtils.equals(co.getContent(),an.getContent())){
                copy.remove(co);
                break;
            }
        }

        copy.add(an);
        return GsonJson.parseDataToJson(copy);
    }

    private YdAncientQuestionsT createAncQaTitleAndAnswer(List<AncientsItemsVo>itemsVos,int index,YdAncientQuestionsT bean){
        if(index==0){
            bean.setAncqatitle(itemsVos.get(index).getContent()+"的下一句是什么？");
            AncientsItemsVo an=new AncientsItemsVo();
            an.setIndex(index);
            an.setItem(AZFilter(index));
            an.setContent(itemsVos.get(index+1).getContent());
            bean.setAncanswer(GsonJson.parseDataToJson(an));
        }
        if(index==1){
            bean.setAncqatitle(itemsVos.get(index).getContent()+"的下一句是什么？");
            AncientsItemsVo an=new AncientsItemsVo();
            an.setIndex(index);
            an.setItem(AZFilter(index));
            an.setContent(itemsVos.get(index+1).getContent());
            bean.setAncanswer(GsonJson.parseDataToJson(an));
        }
        if(index==2){
            bean.setAncqatitle(itemsVos.get(index).getContent()+"的下一句是什么？");
            AncientsItemsVo an=new AncientsItemsVo();
            an.setIndex(index);
            an.setItem(AZFilter(index));
            an.setContent(itemsVos.get(index+1).getContent());
            bean.setAncanswer(GsonJson.parseDataToJson(an));
        }
        if(index==3){
            bean.setAncqatitle(itemsVos.get(index).getContent()+"的上一句是什么？");
            AncientsItemsVo an=new AncientsItemsVo();
            an.setIndex(index);
            an.setItem(AZFilter(index));
            an.setContent(itemsVos.get(index-1).getContent());
            bean.setAncanswer(GsonJson.parseDataToJson(an));
        }
        return bean;
    }
    /**
     * 创建题目题干
     * @param
     * @param index
     * @return
     */
//    private String createAncQaTitle(List<AncientsItemsVo>itemsVos,int index){
//        String ancqatitle= StaticKey.EMPTY;
//
//        if(index==0){
//            ancqatitle=itemsVos.get(index).getContent()+"的下一句是什么？";
//        }
//        if(index==1){
//            ancqatitle=itemsVos.get(index).getContent()+"的下一句是什么？";
//        }
//        if(index==2){
//            ancqatitle=itemsVos.get(index).getContent()+"的下一句是什么？";
//        }
//        if(index==3){
//            ancqatitle=itemsVos.get(index).getContent()+"的上一句是什么？";
//        }
//        return ancqatitle;
//    }
//
//    /**
//     * 创建答案
//     * @param itemsVos
//     * @param index
//     * @return
//     */
//    private String createAncAnswer(List<AncientsItemsVo>itemsVos,int index){
//        String ancanswer= StaticKey.EMPTY;
//        AncientsItemsVo an=new AncientsItemsVo();
//        an.setIndex(index);
//        an.setItem(AZFilter(index));
//        if(index==0){
//            an.setContent(itemsVos.get(1).getContent());
//            ancanswer=GsonJson.parseDataToJson(an);
//        }
//        if(index==1){
//            an.setContent(itemsVos.get(2).getContent());
//            ancanswer=GsonJson.parseDataToJson(an);
//        }
//        if(index==2){
//            an.setContent(itemsVos.get(3).getContent());
//            ancanswer=GsonJson.parseDataToJson(an);
//        }
//        if(index==3){
//            an.setContent(itemsVos.get(2).getContent());
//            ancanswer=GsonJson.parseDataToJson(an);
//        }
//        return ancanswer;
//    }

    private String AZFilter(int index){
        String word="A";
        switch (index){
            case 0:
                word="A";
                break;
            case 1:
                word="B";
                break;
            case 2:
                word="C";
                break;
            case 3:
                word="D";
                break;
            case 4:
                word="E";
                break;
            case 5:
                word="F";
                break;
            case 6:
                word="G";
                break;
            case 7:
                word="H";
                break;
            case 8:
                word="I";
                break;
            case 9:
                word="J";
                break;
            case 10:
                word="K";
                break;
                default:
                    break;

        }
        return word;
    }
}
